| Total Complexity | 1 | 
| Total Lines | 31 | 
| Duplicated Lines | 0 % | 
| Changes | 0 | ||
| 1 | import { Inject } from '@nestjs/common'; | 
            ||
| 7 | |||
| 8 | @QueryHandler(GetLeaveRequestsOverviewQuery)  | 
            ||
| 9 | export class GetLeaveRequestsOverviewQueryHandler { | 
            ||
| 10 | constructor(  | 
            ||
| 11 |     @Inject('IDateUtils') | 
            ||
| 12 | private readonly dateUtils: IDateUtils,  | 
            ||
| 13 |     @Inject('ILeaveRepository') | 
            ||
| 14 | private readonly leaveRepository: ILeaveRepository  | 
            ||
| 15 |   ) {} | 
            ||
| 16 | |||
| 17 | public async execute(  | 
            ||
| 18 | query: GetLeaveRequestsOverviewQuery  | 
            ||
| 19 |   ): Promise<ILeaveRequestsOverview> { | 
            ||
| 20 | const [startDate, endDate] = this.dateUtils.getLeaveReferencePeriodDays(  | 
            ||
| 21 | query.date  | 
            ||
| 22 | );  | 
            ||
| 23 | |||
| 24 | const numDaysPerWeek = this.dateUtils.getWorkedDaysPerWeek();  | 
            ||
| 25 | const numWeeks = this.dateUtils.getNumberOfPaidLeaveWeeks();  | 
            ||
| 26 | const daysPerYear = numWeeks * numDaysPerWeek;  | 
            ||
| 27 | const totalDurationTaken = await this.leaveRepository.getSumOfPaidLeaveDurationsBetween(  | 
            ||
| 28 | startDate,  | 
            ||
| 29 | endDate,  | 
            ||
| 30 | query.userId  | 
            ||
| 31 | );  | 
            ||
| 32 | const daysTaken = this.dateUtils.getLeaveDurationAsDays(totalDurationTaken);  | 
            ||
| 33 | const daysRemaining = daysPerYear - daysTaken;  | 
            ||
| 34 | |||
| 35 |     return { | 
            ||
| 36 | daysPerYear,  | 
            ||
| 37 | daysRemaining  | 
            ||
| 38 | };  | 
            ||
| 41 |